import xlrd
import docx
import os

the_file = "./"
fileName_excel = the_file + "Data/"
tempelate_docx_file = the_file + "Data/210116-商务中心-徐海虹-新型冠状病毒核酸检测报告单.docx"
docx_prefix = "210121-企润-"
docx_tail = "-新型冠状病毒核酸检测报告单.docx"
fixed_name_site = {}                #存放待修改的名称与位置（在docx中）
j = '25'
k = 0

def generate_one_word(informations:list):
    """
    生成一个 word 文件
    按序来修改
    :param informations: 要往 word 中写入的参数
    :param alt_rows:代表要修改的表格（表格即 rows）
    :param row_site: 要修改的行的下标
    :param col_site: 要修改的列的下标
    :return: null
    """
    global j,k
    #1_找待修改元素对应的列的位置
    excel_name_site = {}
    excel_name_site["姓名"] = 1
    excel_name_site["身份证号"] = 2
    excel_name_site["性别"] = 3
    excel_name_site["采样时间"] = 7
    excel_name_site["年龄"] = 8
    #2_修改！
    docx_file = docx.Document(tempelate_docx_file)
    tables = docx_file.tables
    table_1 = tables[0]
    rows = table_1.rows
    cells = rows[0].cells
    cells[1].text = informations[excel_name_site["姓名"]].value
    temp = informations[excel_name_site["性别"]].value
    cells[3].text = ('女' if temp == '0' else '男')
    cells[5].text = str(int(informations[excel_name_site["年龄"]].value))
    cells = rows[1].cells
    cells[1].text = informations[excel_name_site["身份证号"]].value
    cells = rows[2].cells
    cells[3].text = "210121" + '0' + j
    k = k + 1
    if k >= 10:
        j = (str)((int)(j) + 1)
        print(j)
        k = 0
    # 初始化第三个表格
    table_3 = tables[2]
    # 初始化采样时间
    rows = table_3.rows
    cells = rows[1].cells
    temp = informations[excel_name_site["采样时间"]].value
    ymd, hms = (str)(temp).split(' ')
    year, month, day = ymd.split('-')
    hour, minute, second = hms.split(':')
    cells[0].text = "采样时间" + year + '年' + month + '月' + day + '日' + hour + '时' + minute + '分'
    return docx_file

"""    for element in fixed_name_site.keys():
        temp = informations[excel_name_site[element]]
        if element == "采样时间":
            ymd,hms = (str)(temp).split(' ')
            year,month,day = ymd.split('-')
            hour,minute,second = hms.split(':')
            fixed_name_site[element] = "采样时间"+year+'年'+month+'月'+day+'日'+hour+'时'+minute+'分'
        else:
            if element == '性别':
                fixed_name_site[element] = ('女' if temp == '0' else '男')
            else :
                fixed_name_site[element] = temp"""


def mkdir(path):
    fileExist_flag = os.path.exists(path)
    if not fileExist_flag:      # 判断是否存在文件夹如果不存在则创建为文件夹
        os.makedirs(path)       # makedirs 创建文件时如果路径不存在会创建这个路径
    else:
        print("---  There is this folder!  ---")

def open_excel():
    #打开文件与sheet
    #从 txt 文件中找到文件的名字
    global fileName_excel
    with open(the_file + '需处理的excel文件.txt', "r",encoding= 'utf-8') as f:
        fileName = f.read()                      #fileName 为 excel 文件文件名的文字部分
    fileName_excel = fileName_excel + fileName + ".xlsx"
    excel_data = xlrd.open_workbook(fileName_excel)    #打开了 excel 文件
    sheet_1 = excel_data.sheet_by_index(0)             #找到了要改的 sheet
    return fileName,sheet_1

def initial_docx_fixed_information():
    """
    填满全局变量中 fixed_name_site 的信息
    :return:
    """
    global fixed_name_site
    #初始化第一个表中的内容
    docx_file = docx.Document(tempelate_docx_file)
    tables = docx_file.tables
    table_1 = tables[0]
    rows = table_1.rows
    #初始化其中第一行的内容
    cells = rows[0].cells
    #生成名字与其位置
    fixed_name_site["姓名"] = cells[1].text
    #生成性别与其位置
    fixed_name_site["性别"] = cells[3].text
    #生成年龄与其位置
    fixed_name_site["年龄"] = cells[5].text
    #初始化第二行的内容
    cells = rows[1].cells
    #生成身份证号与其位置
    fixed_name_site["身份证号"] = cells[1].text

    #初始化第三个表格
    table_3 = tables[2]
    #初始化采样时间
    rows = table_3.rows
    cells = rows[1].cells
    fixed_name_site["采样时间"] = cells[0].text
    return docx_file

if __name__ == "__main__":
    print("程序运行结束此窗口会自动关闭")
    #1_预处理
    #打开 excel ，找到表格
    fileName,sheet_1 = open_excel()
    #生成 docx 中需要修改部分以及其位置信息
    #docx_file = initial_docx_fixed_information()
    #2_process
    #生成一个新文件夹
    fileName = "企润"
    mkdir(the_file + fileName)
    #在文件夹种生成所有 word 文件
    for i in range(sheet_1.nrows):      #生成一个文件
        #跳过
        if i < 1:
            continue
        #读取有用信息（往 word 中存放的）
        row = sheet_1.row(i)
        docx_file = generate_one_word(row)
        docx_file.save(the_file + fileName + "/" + docx_prefix + str(row[1].value) + docx_tail)







